/*
 * Classe para criar os desafios
 * 
 */
package br.edu.unipampa.desafio;

import br.edu.unipampa.cenario.Local;
import br.edu.unipampa.personagem.Personagem;
import br.edu.unipampa.recurso.Recurso;

/**
 *
 * @author Douglas Montanha Giordano
 */
public class Desafio {
    /**Nome do desafio*/
    private String nome;
    /**Narrativa referente a todo desafio*/
    private String narrativaDoDesafio;
    /**O que é preciso para o personagem passar do desafio*/
    private Recurso requisitoRecurso;
    /**Quantidade de força que o personagem tera que gastar no momento do desafio*/
    private int cansaco;

    public Desafio() {
    }

    public Desafio(String Nome, String Narrativa, Recurso Requisito, int Cansaco) {
        this.nome = Nome;
        this.narrativaDoDesafio = Narrativa;
        this.requisitoRecurso = Requisito;
        this.cansaco = Cansaco;
    }

    public Desafio(String Nome, Recurso Requisito, int Cansaco) {
        this.nome = Nome;
        this.requisitoRecurso = Requisito;
        this.cansaco = Cansaco;
    }

    /**
     * Metodo retorna o nome do desafio.
     *
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * Metodo recebe um nome para o desafio.
     *
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * Metodo retorna o que é o desafio.
     *
     * @return the narrativaDoDesafio
     */
    public String getNarrativaDoDesafio() {
        return narrativaDoDesafio;
    }

    /**
     * Metodo recebe oque é o desafio
     *
     * @param narrativaDoDesafio the narrativaDoDesafio to set
     */
    public void setNarrativaDoDesafio(String narrativaDoDesafio) {
        this.narrativaDoDesafio = narrativaDoDesafio;
    }

    /**
     * Metodo retorna oque o personagem deve possuir para passar do desafio.
     *
     * @return the requisitoRecurso
     */
    public Recurso getRequisitoRecurso() {
        return requisitoRecurso;
    }

    /**
     * Metodo recebe oque o personagem deve possuir para passar do desafio.
     *
     * @param requisitoRecurso the requisitoRecurso to set
     */
    public void setRequisitoRecurso(Recurso requisitoRecurso) {
        this.requisitoRecurso = requisitoRecurso;
    }

    /**
     * Metodo retorna oque o usuario perde de pontos de forca no desafio
     *
     * @return the cansaco
     */
    public int getCansaco() {
        return cansaco;
    }

    /**
     * Metodo recebe oque o usuario perde de pontos de forca no desafio
     *
     * @param cansaco the cansaco to set
     */
    public void setCansaco(int cansaco) {
        this.cansaco = cansaco;
    }

    /**
     * Teste para ver se o personagem passou do desafio
     *
     * @param personagem
     * @return se o personagem passou ou não no desafio
     */
    public boolean passar(Personagem personagem) {
        boolean passou = false;
        for (int i = 0; i < personagem.getItens().length; i++) {
            if (personagem.getItens()[i] != null && personagem.getItens()[i].getQuantidade() > 0
                    && personagem.getItens()[i].getNome().equalsIgnoreCase(getRequisitoRecurso().getNome())) {
                personagem.UsarItem(personagem.getItens()[i]);
                personagem.setForca(personagem.getForca() - getCansaco());
                passou = true;
                break;
            } else {
                passou = false;
            }
        }
        return passou;
    }

    /**
     * Mostra para o usuario como ele se saiu no desafio
     *
     * @param localAtual
     * @param personagem
     * @return
     */
    public String enfrentarDesafio(Personagem personagem) {
        String motivo = "";
        if (passar(personagem)) {
            motivo = "Voce passou do desafio pois possuia o item " + getRequisitoRecurso().getNome();
        } else {
            motivo = "Voce morreu no desafio pois nao possuia o item " + getRequisitoRecurso().getNome();
        }
        return motivo;
    }

    /**
     * Caso o usuario tenha morrido no desafio, este metodo acaba o jogo
     *
     * @param localAtual
     * @param personagem
     */
    public void verificaEstado(Local localAtual, Personagem personagem) {
        if (!passar(personagem)) {
            System.exit(0);
        }
    }
}
